package juc.mythread.finish;

import juc.mythread.tools.SleepTools;

/**
 * @ClassName TestInterrupt
 * @PackageName mythread.finish
 * @projectName myThread
 * @Description 
 * @Author games
 * @Date 2025/8/25 下午1:14
 * @Version 1.0
 */
/*
 * interrupt()
 * 中断唤醒, sleep, wait, join, park,
 *
 * 线程竞争：
 * 多个 Thread 实例竞争同一个 synchronized 锁
 * 只有一个线程能获得锁并执行同步代码
 * 线程阻塞：
 * 未获得锁的 Thread 会被阻塞，进入等待状态
 * 获得锁的线程执行完毕后，释放锁，其他线程继续竞争
 * 线程状态变化：
 * 等待锁的线程处于 BLOCKED 状态
 * 获得锁的线程处于 RUNNABLE 状态
 * synchronized
 * synchronized 是可重入的：同一线程可以多次获得同一个锁
 * synchronized 自动释放：当线程退出同步代码块时自动释放锁
 * interrupt() 对 synchronized 阻塞无效：线程在等待 synchronized 锁时不能被中断唤醒
 * */
public class TestInterrupt {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            while (true) {
                Thread current = Thread.currentThread();
                System.out.println("----: {}");
                boolean interrupted = current.isInterrupted();
                if (interrupted) {
                    System.out.println("中断状态: {}" + interrupted);
                    break;
                }
            }
        }, "t1");
        t1.start();
        SleepTools.second(2);
        //   中断线程t1
        t1.interrupt();
        System.out.println("中断状态: {}" + t1.isInterrupted());
    }
}
